package com.vybfi.pma.dao;

import com.vybfi.pma.dto.StudentProject;
import com.vybfi.pma.entities.Student;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

//用此类继承CrudRepository以使用常规的CRUD方法，并指明数据实体的类名和数据实体中的ID字段的类型
//CrudRepository 主要提供CRUD（增删改查）功能
//Spring Data JPA 中，CrudRepository和JpaRepository的区别:
//`CrudRepository` 主要提供 CRUD （增删改查）功能；
//`PagingAndSortingRepository` 提供了执行分页和排序数据的方法；
//`JpaRepository` 则提供了一些与 JPA 相关的方法，比如刷新持久性上下文和删除批处理中的记录；
//
//根据上面讲到的继承关系，
// `JpaRepository` 将拥有 `PagingAndSortingRepository` 和 `CrudRepository` 所提供的所有功能。
// 因此，如果你不需要使用 `PagingAndSortingRepository` 和 `JpaRepository` 提供的额外功能，
// 那么使用 `CrudRepository` 就足够了。

@Repository
public interface StudentRepository extends CrudRepository<Student,Long> {
    @Override
    List<Student> findAll();

    @Query(nativeQuery=true,value = "SELECT s.name, s.wechat_id AS wechatId, COUNT(s.student_id) AS projectCount " +
            "FROM student AS s LEFT JOIN project_student AS ps ON s.student_id = ps.student_id " +
            "GROUP BY s.name, s.wechat_id ORDER BY 3 desc;")
    List<StudentProject> studentProjects();

    Student findByStudentId(long theId);
}
